要執行的動作
昨天有講到安裝後的執行動作,那安裝之前要執行的動作勒?!
ex 我想先偵測出本機的IP再帶入進安裝包的 SYSTEMIP。
我們先在CustomAction額外建立一個取得本機IP的GetThisIP方法
[CustomAction]
public static ActionResult GetThisIP(Session session)
{
string name = Dns.GetHostName();
var ip = Dns.GetHostEntry(name).AddressList
.ToList()
.Where(o => o.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && !o.ToString().EndsWith(".1"))
.FirstOrDefault()?.ToString() ?? "127.0.0.1";
session["SYSTEMIP"] = ip;
return ActionResult.Success;
}
依昨天的流程建立起來
<CustomAction Id="GetIP" BinaryKey="SettingCADLL" DllEntry="GetThisIP" Execute="immediate" Return="check" />
而啟用時機使用LaunchConditions
google翻譯...哈哈哈
比較好聽我覺得應該叫 啟動後執行
<InstallExecuteSequence>
<Custom Action="GetIP" After="LaunchConditions" Overridable="yes">NOT Installed</Custom>
<Custom Action="SetURL" After="InstallFinalize" Overridable="yes">NOT Installed</Custom>
</InstallExecuteSequence>
建置後執行
到這邊的時候,System IP 還會是預設值127.0.0.1...
後來各種爬文才知道有另一個引用方法,使用InstallUISequence!
所以我們建立這個標籤並將我們這段程式碼移到這裡面來。
<InstallUISequence>
<Custom Action="GetIP" After="LaunchConditions" Overridable="yes">NOT Installed</Custom>
</InstallUISequence>
Try!
其實我這邊很難想像到要用帶有UI的字眼InstallUISequenc可以執行,
嘗試過了才恍然大悟,喔~要用這個才行阿0.0
Day10程式碼
https://github.com/Aslan7826/defaultMVC/commits/Day10